%%----------------------------------------------------
%% 连接器相关数据结构定义
%% 
%% @author yeahoo2000@gmail.com
%% @end
%%----------------------------------------------------
-record(conn, {
        %% 控制对象 
        object              :: undefined | connector | role
        %% 连接器类型
        ,type = tester      :: game_server | monitor | tester
        %% 连接器的所有者帐号名
        ,account = ""     :: list()
        %% 是否需要激活
        ,need_cdkey = 0
        %% 所属平台
        ,platform = ""    :: list()
        %% 所属分区
        ,zone_id = 0        :: non_neg_integer()
        %% 注册渠道
        ,channel_reg = "0"    :: string()
        %% 分发号
        ,dispense = ""   :: list()
        %% 设备号 
        ,device_id = ""
        %% 设备类型
        ,device_type = 1
        %% 地区
        ,area = 0
        %% 系统类型:ios|android|windows
        ,system_type = ""
        %% 个推App ID
        ,getui_app_id = ""
        %% 个推ID
        ,getui_id = ""
        %% 个推intent
        ,getui_intent = ""
        %% 是否成年
        ,adult = 0
        %% 已登录的角色
        ,role_id = 0        :: non_neg_integer()
        %% 受控对象的进程ID
        ,pid_object         :: undefined | pid()
        %% socket port
        ,socket             :: undefined | port()
        %% 客户端IP
        ,ip = {0, 0, 0, 0}  :: {0..255, 0..255, 0..255, 0..255}
        %% 客户端连接端口
        ,port = 1           :: pos_integer()
        %% 建立连接的时间
        ,connect_time = {0, 0, 0} :: {non_neg_integer(), non_neg_integer(), non_neg_integer()}
        %% 已接收的消息数量
        ,recv_count = 0     :: non_neg_integer()
        %% 最后一次检查时记录的已接收的消息数量
        ,last_recv_count = 0:: non_neg_integer()
        %% 已发送的消息数量
        ,send_count = 0     :: non_neg_integer()
        %% 发送错误次数
        ,error_send = 0     :: non_neg_integer()
        %% 记录客户端发送的错误数据包个数
        ,bad_req_count = 0  :: non_neg_integer()
        %% 内部循环计数器
        ,loop_counter = 0   :: non_neg_integer()

        %% 包体长度
        ,length = 0         :: non_neg_integer()
        %% 当前包序
        ,seq = 0            :: non_neg_integer()
        %% 标识正在读取数据包头
        ,read_head = false  :: boolean()
        %% 连续错误的心跳次数
        ,bad_heart_time = 0
        %% 连续正确的心跳次数
        ,exact_heart_time = 0
        %% 渠道标识
        ,login_gid = ""
        %% 游戏标识
        ,login_pid = ""
        %% 用户标识
        ,login_token = ""
    }
).




%% 连接属性
-record(link, {
        %% socket
        socket              :: undefined | port()
        %% 连接器进程pid
        ,conn_pid           :: undefined | pid()
        %% 客户端IP地址
        ,ip = {0, 0, 0, 0}  :: {0..255, 0..255, 0..255, 0..255}
        %% 连接端口
        ,port = 0           :: non_neg_integer()
        %% 网络延时
        ,lag = 0            :: non_neg_integer()
}
).


%% 角色&名称索引，通过角色名查询角色ID和角色进程ID
-record(name_index, {
        %% 角色名
        name = ""               :: list()
        %% 角色ID
        ,id = 0                 :: non_neg_integer()
        %% 帐号名称
        ,acc = ""               :: list()
        %% 角色进程pid
        ,pid                    :: undefined | pid()
        %% 连接进程pid
        ,conn_pid               :: undefined | pid()
}
).

%% 角色&ID索引，通过ID反查角色进程ID和角色名称
-record(id_index, {
        %% 角色ID
        id = {0, "", 0}         :: {non_neg_integer(), list(), non_neg_integer()}
        %% 帐号名称
        ,acc = ""               :: list()
        %% 角色名
        ,name = ""              :: list()
        %% 角色进程pid
        ,pid                    :: undefined | pid()
        %% 连接进程pid
        ,conn_pid               :: undefined | pid()
}
).

%% 角色&帐号索引，通过帐号名反查角色进程ID和角色名称
-record(acc_index, {
        %% 角色ID
        acc = {"", "", 0}       :: {list(), list(), non_neg_integer()}
        %% 角色ID
        ,id = 0                 :: non_neg_integer()
        %% 角色名
        ,name = ""              :: list()
        %% 角色进程pid
        ,pid                    :: undefined | pid()
        %% 连接进程pid
        ,conn_pid               :: undefined | pid()
}
).
